package org.wmq.positiontoshop.common;

import com.google.common.hash.BloomFilter;
import com.google.common.hash.Funnels;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.nio.charset.StandardCharsets;

/**
 * 布隆过滤器配置类
 * 提供不同用途的布隆过滤器实例
 */
@Configuration
public class BloomFilterConfig {
    
    // 预计元素数量
    private static final long EXPECTED_INSERTIONS = 1000000;
    
    // 期望的误判率
    private static final double FALSE_POSITIVE_RATE = 0.01;
    
    /**
     * 店铺ID布隆过滤器
     * 用于缓存穿透防护和数据快速存在性验证
     * 
     * @return 配置好的店铺ID布隆过滤器
     */
    @Bean("shopIdBloomFilter")
    public BloomFilter<Long> shopIdBloomFilter() {
        // 创建布隆过滤器实例，用于Long类型的店铺ID
        return BloomFilter.create(
                Funnels.longFunnel(),
                EXPECTED_INSERTIONS,
                FALSE_POSITIVE_RATE
        );
    }
    
    /**
     * 字符串布隆过滤器
     * 通用的字符串类型布隆过滤器
     * 
     * @return 配置好的字符串布隆过滤器
     */
    @Bean("stringBloomFilter")
    public BloomFilter<String> stringBloomFilter() {
        // 创建布隆过滤器实例，用于String类型数据
        return BloomFilter.create(
                Funnels.stringFunnel(StandardCharsets.UTF_8),
                EXPECTED_INSERTIONS,
                FALSE_POSITIVE_RATE
        );
    }
}